「Git 介紹」Ch2: git rebase 互動模式 - git rebase -i
上次提到
git rebase
的使用時機,這次介紹一下git rebase -i
互動模式!
(What?) 什麼是 git rebase -i
- Git rebase 提供的全家餐,輸入魔法
-i
, 搭配 commit ID, 神力再現。
(How?) git rebase -i 的幾種操作
1.情境:
- 假設現在自己分支多了 3 個 commit 準備要合回去主分支,在合回去之前,想對自己的 commit 先做些整理,這時候
git rebase -i
就派上用場了。
# 目前的三個 commit, commit ID 先用 aaaaaaa, bbbbbbb, ccccccc 代替, a 是第一個 commit, b 是第二個, c 是第三個
ccccccc commit-msg
bbbbbbb commit-msg
aaaaaaa commit-msg
2. 流程:
- 進入互動模式
- 執行這次想做的修改
- 如果有衝突的話,需要解決
- 完成操作
3. 進入,git rebase -i <commit ID>
- 解釋: 代表我現在想進入 interactive rebase 的模式來做些事情,那我要處理哪些 commit 呢? 就是 -i 後面輸入的
<commit ID>
之後的所有 commit 我可能需要處理。
所以這行指令就是,我想進入互動模式處理
<commit ID>
之後的 commit (不包括輸入的 commit ID 的 commit 好饒舌?..)
4. 進來後,注意順序:
- 一進來互動模式時,最新的 commit 是在最下面!
# 像是這樣
# 上面最舊
pick aaaaaaa commit-msg #1
pick bbbbbbb commit-msg #2
pick ccccccc commit-msg #3
# 下面最新
5. 手法:
pick
- 預設值
- 作用: 意思是保留這個 commit
squash
- 合併
- 作用: 合併多個 commit
pick aaaaaaa commit-msg #1
squash bbbbbbb commit-msg #2
pick ccccccc commit-msg #3
把 pick 改成 squash。如此,
bbbbbbb
會與前一個 commitaaaaaaa
合併。
reword
- 修改訊息
- 作用: 修改 commit message
pick aaaaaaa commit-msg #1
reword bbbbbbb commit-msg #2
reword ccccccc commit-msg #3
如此便能修改 commit message
drop
- 丟掉
- 作用: 丟掉這個 commit
pick aaaaaaa commit-msg #1
drop bbbbbbb commit-msg #2
pick ccccccc commit-msg #3
如此
bbbbbbb
這個 commit 便會被丟掉。 也可以直接刪掉那一行,也可以達成丟掉。
edit
- 修改內容
- 作用: 我要這個 commit 但到這裡的時候停一下,我要修改一下。 修改完後指令接著做:
git add xxxx
git commit --amend --no-edit
# --no-edit 是不修改 commit 訊息
fixup
- 也是合併
- 作用: 也是合併,但捨棄這個 commit message。
替換 commit 順序
- 就直接換就好哈哈哈哈
pick aaaaaaa commit-msg #1
pick ccccccc commit-msg #3
pick bbbbbbb commit-msg #2
6. 一些會遇到的基本流程:
修改 commit message。
遇到衝突:
解決衝突
git add xxxxxxxx
git rebase --continue
放棄這次 rebase,回到之前的狀態。
git rebase --abort
小心使用, 慎用。如果有衝突,這個會丟掉整個 commit,很容易出事。
git rebase --skip
The End:
Review:
git rebase -i
所做的更動,commit ID 的 SHA-1值是會變的,也就是說與人協作時要注意目前做的動作會不會影響他人。- 善用
git rebase -i
整理自己的 commit 紀錄。 git rebase -i
時, 遇到衝突會一個一個停下來讓我們解決。git rebase --skip
危險!git rebase --abort
當作什麼事都沒發生。- 最後,
git rebase -i <commit ID>
安心服用,熟能生巧。